import 'dart:typed_data';

import 'package:dartx/dartx.dart';
import 'package:sgy_flutter/model/abnormal_zero_record.dart';
import 'package:sgy_flutter/model/detection_result_model.dart';
import 'package:sgy_flutter/model/dfu_info_model.dart';
import 'package:sgy_flutter/model/dls_upload_model.dart';
import 'package:sgy_flutter/model/dls_upload_model_old.dart';
import 'package:sgy_flutter/model/ota_info_model.dart';
import 'package:sgy_flutter/model/pair_state.dart';

/**
 * 透传接口
 */
abstract class ICustomService{
  Stream<DlsUploadModel> get dlsUploadModel;
  Stream<DlsUploadModelOld> get dlsUploadDataOld;

  Future<DfuInfoModel> checkDfu();

  /**
   * 获取配对状态
   */
  Future<PairState> getPairState();

  /**
   * 配对
   */
  Future<bool> startPair();

  /**
   * 设置传感器类型
   * @param type Int 01(加速度计) 02（陀螺仪）
   * @return IntModel
   */
  Future<bool> setSensorType(int type);
  /**
   * 获取传感器类型,DLS专属
   */
  Future<int> getSensorType();
  /**
   * 重置功率偏移
   */
  Future<Uint8List> resetPowerOffset();

  /**
   * 设置功率偏移
   */
  Future<bool> setPowerOffset(int value);

  /**
   * 倒链归零
   */
  Future<bool> getReverseChain2Zero();

  /**
   * 倒链归零
   */
  Future<bool> setReverseChain2Zero(bool enable);

  /**
   * 打开运输模式
   */
  Future<bool> openTransportMode();

  /**
   * 数据上传开关
   * 只能开，李总说断开就自动关
   * @param enable Boolean
   * DLS 所有,需要自己打开,其他是自己不停上传
   */
  Future openDataUpload();

  /**
   * 获取比例因子,也就是功率偏移
   * @return ScaleFactorModel
   */
  Future<int?> getScaleFactor();

  /**
   * 零点校准
   */
  Future<Uint8List> adjustZero();

  /**
   * 获取零点校准记录
   */
  Future<List<Pair<int, String>>> fetchAdjustZeroRecord();

  /**
   * 是否充电中
   */
  Future<bool> isCharging();

  /**
   * 获取异常零点记录
   */
  Future<AbnormalZeroRecord> fetchAbnormalZeroRecord();

  /**
   * 获取回退版本，没有则不能回退
   * @return String 可以回退的版本号,如果空的则不能回退
   */
  Future<OTAInfoModel> getFallbackVersion();

  Future<DetectionResultModel> detection();
}